chown関数は、ファイルやディレクトリ(フォルダ)の所有者(owner)とグループ(group)を変更します。なお、この機能を使うには、実行プロセスが所有者やグループを変更できる権限を持っていることが必要です。
この関数は、C言語のライブラリ関数(標準関数)ではありませんので、コンパイラにより、使えない場合があります。
#include <unistd.h>
int chown(const char *path, uid_t owner, gid_t group);
*pathは変更するファイルのパス名を指定します。
ownerは所有者ID(ユーザID)を指定します。
groupはグループIDを指定します。
owner又は、groupに-1を指定すると、それらのIDは変更しません。
戻り値として、処理が成功した場合は0を、失敗した場合は-1を返します。
プログラム 例
#include <stdio.h> #include <unistd.h> #include <stdlib.h> int main(int argc, char **argv) { char ans; int return_code = 0; if (argc == 4) { printf('%sの所有者を変更します。よろしいですか(y/n)==> ', *(argv + 1)); scanf('%c', &ans); if (ans == 'y' || ans == 'Y') { /* 所有者とグループを変更する */ if (chown(*(argv + 1), /* パス名 */ atoi(*(argv + 2)), /* 所有者ID(ユーザID) */ atoi(*(argv + 3))) == 0) { /* グループID */ printf('所有者を変更しました\n'); } else { printf('所有者を変更できませんでした\n'); perror(''); return_code = 1; } } else { printf('キャンセルします\n'); } } else { printf('実行時引数の数が不当です\n'); return_code = 2; } return return_code; }
例の実行結果
$ ls -l DIR1 合計 8 -rwxr-xr-x 1 user users 39 2008-07-29 10:13 hello_1.sh -rw-r--r-- 1 root root 39 2008-07-29 10:43 hello_2.sh $ $ ./chown.exe ./DIR1/hello_1.sh 1002 100 ./DIR1/hello_1.shの所有者を変更します。よろしいですか(y/n)==> y 所有者を変更できませんでした Operation not permitted $ $ su パスワード: # ./chown.exe ./DIR1/hello_1.sh 1002 100 ./DIR1/hello_1.shの所有者を変更します。よろしいですか(y/n)==> y 所有者を変更しました # ls -l DIR1 合計 8 -rwxr-xr-x 1 guest users 39 2008-07-29 10:13 hello_1.sh -rw-r--r-- 1 root root 39 2008-07-29 10:43 hello_2.sh $